package com.evan.kdl.test.day01;

import cn.hutool.core.util.ObjectUtil;
import com.evan.kdl.util.CommonUtils;

import java.util.concurrent.CompletableFuture;

/**
 * @author huangzhongliang
 * CompletableFuture API 还提供了一种更通用的方法 `handle()` 表示从异常中恢复
 * handle() 常常被用来恢复回调链中的一次特定的异常，回调链恢复后可以进一步向下传递。
 * @time 2024/01/05 16:46
 */
public class HandleDemo {
    public static void main(String[] args) {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            //int r = 1 / 0;
            return "result";
        }).handle((ret, ex) -> {
            //恢复调用链
            CommonUtils.printThreadLog("恢复调用链");
            if (ObjectUtil.isNotEmpty(ex)) {
                System.out.println("我们得到异常：" + ex.getMessage());
                return "Unknown!";
            }
            return ret;
        });

        String join = future.join();
        System.out.println("join = " + join);
    }
}
